package com.flxz.user.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.flxz.user.domain.vo.TipsListVO;
import com.flxz.user.domain.vo.TipsDetailVO;
import com.flxz.user.domain.vo.TipsPublishVO;
import com.flxz.user.domain.vo.ReplyVO;
import com.flxz.user.domain.vo.LikeVO;
import com.flxz.user.domain.vo.FavoriteVO;
import com.flxz.user.domain.vo.ReportVO;
import com.flxz.user.domain.vo.CategoryVO;

/**
 * 用户端省薪贴Mapper接口
 * 
 * @author flxz
 * @date 2025-09-14
 */
public interface UserTipsMapper
{
    /**
     * 查询省薪贴列表
     * 
     * @param query 查询条件
     * @return 省薪贴列表
     */
    List<TipsListVO> selectTipsList(TipsListVO query);

    /**
     * 查询省薪贴详情
     * 
     * @param topicId 主题ID
     * @return 省薪贴详情
     */
    TipsDetailVO selectTipsDetail(Long topicId);

    /**
     * 新增省薪贴
     * 
     * @param tipsVO 省薪贴信息
     * @return 结果
     */
    int insertTips(TipsPublishVO tipsVO);

    /**
     * 查询分类列表
     * 
     * @return 分类列表
     */
    List<CategoryVO> selectCategoryList();

    /**
     * 查询回复列表
     * 
     * @param query 查询条件
     * @return 回复列表
     */
    List<ReplyVO> selectReplyList(ReplyVO query);

    /**
     * 新增回复
     * 
     * @param replyVO 回复信息
     * @return 结果
     */
    int insertReply(ReplyVO replyVO);

    /**
     * 检查点赞状态
     * 
     * @param userId 用户ID
     * @param targetType 目标类型
     * @param targetId 目标ID
     * @return 是否已点赞
     */
    boolean checkLikeStatus(@Param("userId") Long userId, @Param("targetType") String targetType, @Param("targetId") Long targetId);

    /**
     * 检查收藏状态
     * 
     * @param userId 用户ID
     * @param topicId 主题ID
     * @return 是否已收藏
     */
    boolean checkFavoriteStatus(@Param("userId") Long userId, @Param("topicId") Long topicId);

    /**
     * 新增点赞
     * 
     * @param likeVO 点赞信息
     * @return 结果
     */
    int insertLike(LikeVO likeVO);

    /**
     * 删除点赞
     * 
     * @param userId 用户ID
     * @param targetType 目标类型
     * @param targetId 目标ID
     * @return 结果
     */
    int deleteLike(@Param("userId") Long userId, @Param("targetType") String targetType, @Param("targetId") Long targetId);

    /**
     * 增加点赞数
     * 
     * @param targetType 目标类型
     * @param targetId 目标ID
     * @return 结果
     */
    int increaseLikeCount(@Param("targetType") String targetType, @Param("targetId") Long targetId);

    /**
     * 减少点赞数
     * 
     * @param targetType 目标类型
     * @param targetId 目标ID
     * @return 结果
     */
    int decreaseLikeCount(@Param("targetType") String targetType, @Param("targetId") Long targetId);

    /**
     * 新增收藏
     * 
     * @param favoriteVO 收藏信息
     * @return 结果
     */
    int insertFavorite(FavoriteVO favoriteVO);

    /**
     * 删除收藏
     * 
     * @param userId 用户ID
     * @param topicId 主题ID
     * @return 结果
     */
    int deleteFavorite(@Param("userId") Long userId, @Param("topicId") Long topicId);

    /**
     * 增加收藏数
     * 
     * @param topicId 主题ID
     * @return 结果
     */
    int increaseFavoriteCount(Long topicId);

    /**
     * 减少收藏数
     * 
     * @param topicId 主题ID
     * @return 结果
     */
    int decreaseFavoriteCount(Long topicId);

    /**
     * 新增举报
     * 
     * @param reportVO 举报信息
     * @return 结果
     */
    int insertReport(ReportVO reportVO);

    /**
     * 增加浏览次数
     * 
     * @param topicId 主题ID
     * @return 结果
     */
    int increaseViewCount(Long topicId);

    /**
     * 更新主题回复信息
     * 
     * @param topicId 主题ID
     * @param userId 用户ID
     * @return 结果
     */
    int updateTopicReplyInfo(@Param("topicId") Long topicId, @Param("userId") Long userId);

    /**
     * 查询我的省薪贴
     * 
     * @param query 查询条件
     * @return 我的省薪贴列表
     */
    List<TipsListVO> selectMyTips(TipsListVO query);

    /**
     * 查询我的收藏
     * 
     * @param query 查询条件
     * @return 我的收藏列表
     */
    List<TipsListVO> selectMyFavorites(TipsListVO query);

    /**
     * 更新我的省薪贴
     * 
     * @param tipsVO 省薪贴信息
     * @return 结果
     */
    int updateMyTips(TipsPublishVO tipsVO);

    /**
     * 删除我的省薪贴
     * 
     * @param topicIds 主题ID数组
     * @param userId 用户ID
     * @return 结果
     */
    int deleteMyTips(@Param("topicIds") Long[] topicIds, @Param("userId") Long userId);

    /**
     * 根据主题ID删除回复
     * 
     * @param topicIds 主题ID数组
     * @return 结果
     */
    int deleteReplyByTopicIds(Long[] topicIds);

    /**
     * 根据主题ID删除点赞
     * 
     * @param topicIds 主题ID数组
     * @return 结果
     */
    int deleteLikeByTopicIds(Long[] topicIds);

    /**
     * 根据主题ID删除收藏
     * 
     * @param topicIds 主题ID数组
     * @return 结果
     */
    int deleteFavoriteByTopicIds(Long[] topicIds);
}
